import router from './router'
import store from './store'
// import { Message } from 'element-ui'
import NProgress from 'nprogress' // 进度条插件
import 'nprogress/nprogress.css' // 进度条插件样式

NProgress.configure({ showSpinner: false })

// 白名单
const whiteList = ['/login', '/404']
// 前置导航守卫
// 路由前置导航守卫: 主页鉴权,使用token和白名单,判断用户是否具有进入到主页的权限
// to: 当前路由去哪里(路由规则对象)
// from:当前路由从哪里来(路由规则对象)
// next: 是否放行当前路由,类型是函数 , 放行: next(); 不放行,将路由拦截到某处: next('目标路径')
router.beforeEach(async(to, from, next) => {
  // 开启进度条
  NProgress.start()
  // 获取token
  const token = store.getters.token
  // 判断是否有token
  if (token) {
    // 有token值,判断是不是要进入登录页
    if (to.path === '/login') {
    // 有token,进入登录页,跳转到首页
      next('/')
      // 如果使用next('目标路径'),不会触发后置导航守卫,无法关闭进度条
      // 手动关闭进度条
      NProgress.done()
    } else {
    // 判断是否调用过接口
      if (!store.getters.userId) {
        // 调用用户基本信息的接口
        await store.dispatch('user/getUserInfo')
      }
      // 有token,进入的不是登录页,直接放行
      next()
    }
  } else {
    // 没token值
    if (whiteList.includes(to.path)) {
      // 如果去的是白名单,直接放行
      next()
    } else {
      // 不是白名单,强制跳转到登录页
      next('/login')
      // 关闭进度条
      NProgress.done()
    }
  }
})
// 后置导航守卫
router.afterEach(() => {
  // 关闭进度条
  NProgress.done()
})
